package com.ruoyi.ring.service.impl;

import cn.hutool.core.convert.Convert;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.ring.domain.DailyTagsConf;
import com.ruoyi.ring.domain.vo.DailyTagsConfVO;
import com.ruoyi.ring.domain.vo.TagTypeGroupVO;
import com.ruoyi.ring.mapper.DailyTagsConfMapper;
import com.ruoyi.ring.service.IDailyTagsConfService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 事件小计内容Service业务层处理
 * 
 * @author liuwp
 * @date 2025-08-18
 */
@Slf4j
@Service
public class DailyTagsConfServiceImpl implements IDailyTagsConfService 
{
    @Autowired
    private DailyTagsConfMapper dailyTagsConfMapper;

    /**
     * 查询事件小计内容
     * 
     * @param id 事件小计内容主键
     * @return 事件小计内容
     */
    @Override
    public DailyTagsConf selectDailyTagsConfById(Long id)
    {
        return dailyTagsConfMapper.selectDailyTagsConfById(id);
    }

    /**
     * 查询事件小计内容列表
     * 
     * @param dailyTagsConf 事件小计内容
     * @return 事件小计内容
     */
    @Override
    public List<DailyTagsConf> selectDailyTagsConfList(DailyTagsConf dailyTagsConf)
    {
        return dailyTagsConfMapper.selectDailyTagsConfList(dailyTagsConf);
    }

    /**
     * 根据业务主键查询一条记录：事件小计内容
     *
     * @param dailyTagsConf 事件小计内容
     * @return 事件小计内容
     */
    @Override
    public DailyTagsConf selectOneDailyTagsConf(DailyTagsConf dailyTagsConf)
    {
        return dailyTagsConfMapper.selectOneDailyTagsConf(dailyTagsConf);
    }

    /**
     * 新增事件小计内容
     * 
     * @param dailyTagsConf 事件小计内容
     * @return 结果
     */
    @Override
    public int insertDailyTagsConf(DailyTagsConf dailyTagsConf)
    {
        dailyTagsConf.setUserId(SecurityUtils.getUserId());
        return dailyTagsConfMapper.insertDailyTagsConf(dailyTagsConf);
    }

    /**
     * 修改事件小计内容
     * 
     * @param dailyTagsConf 事件小计内容
     * @return 结果
     */
    @Override
    public int updateDailyTagsConf(DailyTagsConf dailyTagsConf)
    {
        return dailyTagsConfMapper.updateDailyTagsConf(dailyTagsConf);
    }

    @Override
    public int updateDailyTagsConfCondition(DailyTagsConf dailyTagsConf, DailyTagsConf dailyTagsConfCondition)
    {
        return dailyTagsConfMapper.updateDailyTagsConfCondition(dailyTagsConf, dailyTagsConfCondition);
    }

    /**
     * 批量删除事件小计内容
     * 
     * @param ids 需要删除的事件小计内容主键
     * @return 结果
     */
    @Override
    public int deleteDailyTagsConfByIds(Long[] ids)
    {
        return dailyTagsConfMapper.deleteDailyTagsConfByIds(ids);
    }

    /**
     * 删除事件小计内容信息
     * 
     * @param id 事件小计内容主键
     * @return 结果
     */
    @Override
    public int deleteDailyTagsConfById(Long id)
    {
        return dailyTagsConfMapper.deleteDailyTagsConfById(id);
    }

    /**
     * 条件删除事件小计内容
     *
     * @param dailyTagsConf 事件小计内容
     * @return 结果
     */
    @Override
    public int deleteDailyTagsConfByCondition(DailyTagsConf dailyTagsConf)
    {
        return dailyTagsConfMapper.deleteDailyTagsConfByCondition(dailyTagsConf);
    }

    /**
     * 查询事件小计内容列表
     *
     * @param dailyTagsConf 事件小计内容
     * @return 事件小计内容
     */
    @Override
    public List<TagTypeGroupVO> queryList(DailyTagsConf dailyTagsConf) {
        List<DailyTagsConf> list = dailyTagsConfMapper.queryList(dailyTagsConf);
        // 按 tag_type 分组并转换为嵌套类结构
        Map<Integer, List<TagTypeGroupVO.TagInfoVO>> groupMap = list.stream()
                .collect(Collectors.groupingBy(
                        DailyTagsConf::getTagType,
                        Collectors.mapping( data -> new TagTypeGroupVO.TagInfoVO(
                                        data.getId(),
                                        data.getTagCode(),
                                        data.getTagName(),
                                        data.getUserId(),
                                        data.getDailyValue()
                                ),
                                Collectors.toList()
                        )
                ));
        // 将 Map 转换为 TagTypeGroup 列表
        List<TagTypeGroupVO> result = groupMap.entrySet().stream()
                .map(entry -> new TagTypeGroupVO(entry.getKey(), entry.getValue()))
                .collect(Collectors.toList());
        return result;
    }

    /**
     * 根据业务主键查询一条记录：事件小计内容
     *
     * @param dailyTagsConf 事件小计内容
     * @return 事件小计内容
     */
    @Override
    public List<DailyTagsConfVO> queryOneDailyTagsConf(DailyTagsConf dailyTagsConf) {
        return Convert.toList(DailyTagsConfVO.class,dailyTagsConfMapper.queryOneDailyTagsConf(dailyTagsConf));
    }
}
